001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Apr 27, 2003
005 * Time: 1:14:55 PM
006 */
007
008 package EVolve.util.phasedetectors;
009
010 import EVolve.visualization.XYViz.XYVisualization;
011 import EVolve.visualization.AxesPanel;
012 import EVolve.Scene;
013 import EVolve.util.HelperFuncs;
014 import javax.swing.*;
015 import java.awt.*;
016
017 public class PhaseAddRemover extends Thread{
018 private XYVisualization workingViz;
019 private boolean bAdding;
020
021 public void beginAdd() {
022 this.bAdding = true;
023 start();
024 }
025
026 public void beginRemove() {
027 this.bAdding = false;
028 start();
029 }
030
031 public void run() {
032 workingViz = HelperFuncs.getActiveXYViz();
033
034 if (workingViz == null) return;
035
036 Scene.getUIManager().enablePhaseDetectorButton(false);
037
038 workingViz.freeze(true);
039 AxesPanel canvas = (AxesPanel)((JScrollPane)workingViz.getPanel()).getViewport().getView();
040 setCursor(canvas, false);
041
042 while (workingViz.isFreezed()) {
043 try {
044 sleep(100);
045 } catch (InterruptedException e) {
046 break;
047 }
048 }
049
050 setCursor(canvas, true);
051 int newPhase = getPhaseUnderMouse();
052
053 if (newPhase >= 0) {
054 if (bAdding)
055 workingViz.getPhaseDetector().addPhaseManually(newPhase+1);
056 else
057 workingViz.getPhaseDetector().removePhaseManually(newPhase+1);
058 }
059
060 Scene.getUIManager().enablePhaseDetectorButton(true);
061 }
062
063 private void setCursor(JPanel panel, boolean reset) {
064 if (reset)
065 panel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
066 else
067 panel.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
068 }
069
070 private int getPhaseUnderMouse() {
071 XYVisualization visual = HelperFuncs.getActiveXYViz();
072
073 if (visual == null) {
074 return -1;
075 }
076
077 Point pt = visual.getMousePosition();
078 AxesPanel canvas = (AxesPanel)((JScrollPane)visual.getPanel()).getViewport().getView();
079
080 return canvas.getImageX(pt.x);
081 }
082 }